package org.bigjava.novelplatform.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.bigjava.novelplatform.common.enums.Subscribe;
import org.bigjava.novelplatform.entity.BookRack;
import org.bigjava.novelplatform.entity.Books;
import org.bigjava.novelplatform.entity.Users;
import org.bigjava.novelplatform.vo.BookRackItemVo;

import java.util.List;

/**
* @author YKH
* @description 针对表【book_rack】的数据库操作Mapper
* @createDate 2022-03-20 14:42:21
* @Entity org.bigjava.novelplatform.entity.BookRack
*/
public interface BookRackMapper extends BaseMapper<BookRack> {

    /**
     * 查询用户书架某分组的书籍,未排序
     * @param userId
     * @param group
     * @return
     */
    List<Books> selectBookByUserId(@Param("userId") Integer userId, @Param("group") String group);

    /**
     * 查询用户书架某分组的书籍，已排序
     * @param userId
     * @param group
     * @return
     */
    List<BookRack> selectBookRack(@Param("userId") Integer userId, @Param("group") String group);

    /**
     * 在书架上批量插入书籍信息
     * @param userId
     * @param group
     * @param bookIdList
     */
    void batchInsert(@Param("userId") Integer userId,
                     @Param("group") String group,
                     @Param("bookIdList") List<Integer> bookIdList);

    /**
     * 批量删除书架的书籍
     * @param userId
     * @param bookIdList
     */
    void batchRemove(@Param("userId") Integer userId, @Param("bookIdList") List<Integer> bookIdList);

    /**
     * 将书籍从一个分组移至另一个分组
     * @param userId
     * @param oldGroup
     * @param targetGroup
     * @param bookIdList
     */
    void moveBookRack(@Param("userId") Integer userId,
                      @Param("oldGroup") String oldGroup,
                      @Param("targetGroup") String targetGroup,
                      @Param("bookIdList") List<Integer> bookIdList);

    /**
     * 设置书籍的排序字段
     * @param userId
     * @param bookId
     * @param sort
     */
    void topping(@Param("userId") Integer userId, @Param("bookId") Integer bookId, Integer sort);

    /**
     * 排序
     * @param userId
     * @param group
     * @param bookIdList
     */
    void sort(@Param("userId") Integer userId, @Param("group") String group, @Param("bookIdList") List<Integer> bookIdList);

    /**
     * 查询书籍订阅情况
     * @param bookId
     * @return
     */
    Integer selectSubscribeByBookId(@Param("bookId") Integer bookId);

    /**
     * 修改用户订阅状态
     * @param userId
     * @param bookId
     * @param subscribe
     */
    void updateSubscribe(@Param("userId") Integer userId, @Param("bookId") Integer bookId,
                         @Param("subscribe") Subscribe subscribe);

    /**
     * 查询用户对某本书的打赏排行
     * @param bookId
     * @return
     */
    List<Users> selectFanRanking(@Param("bookId") Integer bookId, @Param("limit") Integer limit);

    /**
     * 查询书架
     * @param bookId
     * @param id
     * @return
     */
    BookRack selectBookRackByUserIdAndBookId(@Param("bookId") Integer bookId, @Param("id") Integer id);

    /**
     * 将书籍添加到书架
     * @param userId
     * @param group
     * @param bookId
     */
    void addBookRack(@Param("userId") Integer userId, @Param("group") String group, @Param("bookId") Integer bookId);

    /**
     * 书架书籍信息
     * @param userId
     * @param group
     * @return
     */
    List<BookRackItemVo> selectBookRackItemVo(@Param("userId") Integer userId, @Param("group") String group);

    /**
     * 逻辑删除
     * @param id
     * @param bookIdList
     */
    void logicalDeletion(@Param("id") Integer id, @Param("bookIdList") List<Integer> bookIdList);

    /**
     * 增加消费积分
     * @param userId
     * @param bookId
     */
    void increaseContribution(@Param("userId") Integer userId, @Param("bookId") Integer bookId, @Param("increase") Long increase);
}




